package jvm;

/**
 * @Author: ycy
 * @CreateDate: 2020/4/30 20:40
 */
public class StaticDemo {

  static {
    System.out.println("StaticDemo 静态方法 init");
  }

  public static void main(String[] args) {
    //下面是产生主动引用的 5 种情况，主动引用会是类 初始化，初始化 可以让类 加载静态属性和静态方法
    //5 "StaticDemo 静态方法 init" main 方法所在类
    //4 访问静态方法 或者 静态属性 都会初始化，但是final 修饰的不会初始化
    // System.out.println(Parent.i);
    //3 初始化子类 就必须先初始化父类
    System.out.println(Child.childval);
    //2 通过反射获取对象
    //1 通过 new 实例化一个对象
    Child child = new Child();
  }

}

class Parent {
  static {
    System.out.println("Parent 静态方法 init");
  }

  public static int i = 10;
}

class Child extends Parent {
  static int childval = 10;

  static {
    System.out.println("Child 静态方法 init");

  }
}